/*
读取文件：

	方法1：Read
		1、只读方式打开文件 file, err := os.Open()
		2、读取文件 file.Read(b []byte) (n int, err error)
		3、关闭文件流 defer file.Close()

	方法2：bufio
		1、只读方式打开文件 file, err := os.Open()
		2、创建reader对象 reader := bufio.NewReader(file)
		3、ReadString读取文件 line, err := reader.ReadString('\n')
		4、关闭文件流 defer file.Close()

	方法3：ioutil
		打开和关闭操作已经封装好了，直接执行
		ioutil.ReadFile("./main.go")
*/

package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	// 只读方式打开
	file, err := os.Open("./text.txt")
	defer file.Close() //必须关闭文件流
	if err != nil {
		fmt.Println(err)
		return
	}

	// // 操作文件
	// // 只读取128字节
	// var tempSlice = make([]byte, 128)
	// fmt.Println(file)
	// n, err := file.Read(tempSlice)
	// if err != nil {
	// 	fmt.Println("读取失败")
	// 	return
	// }
	// fmt.Printf("读取到了%v个字节\n", n)
	// fmt.Println(string(tempSlice))

	// 循环全部读取
	var strSlice []byte
	var tempSlice = make([]byte, 10)
	for {
		n, err := file.Read(tempSlice)
		if err == io.EOF {
			fmt.Println("读取完毕")
			break
		}
		if err != nil {
			fmt.Println("读取失败")
			return
		}
		fmt.Printf("读取到了%v个字节\n", n)
		strSlice = append(strSlice, tempSlice[:n]...)
	}
	fmt.Println(string(strSlice))

}
